//
//  StatusLIstViewModel.swift
//  SinaWeiBo
//
//  Created by gxiangzi on 15/9/6.
//  Copyright © 2015年 hqu. All rights reserved.
//

import UIKit
import ReactiveCocoa
import SDWebImage

class StatusListViewModel: NSObject {

    /// 定义一个数组接受该类型
    var statuses:[AnyObject] = [StatusViewModel]()
    
    func loadStatuses(isPullupRefresh isPullupRefresh:Bool) -> RACSignal {
        
        // 初始化的刷新，statues 中没有内容
        // 所以将数组的第一项的id 当做since_id
        // 下拉刷新使用
        /// 若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。
        var  since_id : Int = statuses.count == 0 ? 0 : (statuses.first as! StatusViewModel).status.id
        
        
        /// 若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
        var max_id : Int = 0
        
        ///  如果是上拉刷新的话，就设置max_id 等于最后一条微博的id
        if isPullupRefresh {
            
            since_id = 0
            max_id = (statuses.last as! StatusViewModel).status.id
        }
      
        return  RACSignal.createSignal({ (subscriber) -> RACDisposable! in
            
            NetworkTools.sharedTools.loadStatus(since_id: since_id, max_id: max_id).subscribeNext({ (result) -> Void in
                
                // 1.获取 result 数据中的 status 数组
                guard let array = result["statuses"] as? [[String:AnyObject]] else {
                    
                    print("网络有问题")
                    return
                }
                
                // 定义 并且 创建一个临时的数组，来记录模型
                // 也可以 为了以后 刷新数据使用
                var arrayM = [AnyObject]()
                
                // 遍历数组，字典转模型
                for dict in array {
                    
                    arrayM.append(StatusViewModel(status: Status(dict: dict)))
                }
                
                printLog("刷新到 \(arrayM.count)")
                
                self.cacheWebImage(arrayM as! [StatusViewModel]) {
                
                    
                    if max_id > 0 {
                        // 下拉刷新
                        self.statuses += arrayM
                        printLog("######\(self.statuses.count)")
                    } else {
                        self.statuses = arrayM + self.statuses
                         printLog(self.statuses.count)
                    }
                                        
                    /// 测试
                    //                printLog(self.statuses)
                    
                    subscriber.sendCompleted()
                }
                
                
                }, error: { (error) -> Void in
                    
                    subscriber.sendError(error)
                    
                }) {}
            
                return nil
            })
        
        }
    
    private func cacheWebImage(viewModel:[StatusViewModel], finished:()->()) {
        
        let group = dispatch_group_create()
        
        
        // 获得相应的缓存的文件
        for status in viewModel {
             let count = status.thumbnail?.count ?? 0
             if count != 1
             {
                continue
            }
            dispatch_group_enter(group)
            SDWebImageManager.sharedManager().downloadImageWithURL(status.thumbnail![0], options: [], progress: nil, completed: { (image, _, _, _, _) -> Void in
           
                _ = UIImagePNGRepresentation(image)
                
                dispatch_group_leave(group)
            })
        }
        
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            finished()
        }
    }
}
